/**
 * 下一个日期
 * [输入在1900~2050年之间某一日期，自动输出输入日期的下一个日期]
 *
 * @author sunset
 * @version : [v1.0]
 * @createTime : [2022/5/21 14:15]
 */
@SuppressWarnings("checkstyle:JavadocType")
public class NextDate {
    /**
     * 下一个日期
     *
     * @param date 日期
     * @return {@link String}
     */
    @SuppressWarnings("checkstyle:LeftCurly")
    public String nextDate(String date) { //  [1900,2050]
        String x;
        String error = "输入日期有误";
        //分割字符串
        date = date.replace('年', ',');
        date = date.replace('月', ',');
        date = date.replace('日', ',');
        String[] dates = date.split(",");

        if (dates.length < 3) {
            return error;
        }
        //将分割后的字符串转换陈int型数据
        int y = Integer.parseInt(dates[0]);
        int m = Integer.parseInt(dates[1]);
        int d = Integer.parseInt(dates[2]);

        //设置闰年和非闰年的不同组日期
        int[] p = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int[] month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        if ((y <= 2050) && (y >= 1900) && (m >= 1) && (m <= 12) && (d >= 1) && (d <= 31)) {
            // 判断闰年
            if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
                System.arraycopy(p, 0, month, 0, 12);
            }
            //  比较日期
            if (month[m - 1] > d) {
                d = d + 1; //天数+1
                x = y + "年" + m + "月" + d + "日";
            } else if (month[m - 1] == d && m < 12) {
                m = m + 1;
                x = y + "年" + m + "月" + "1日";
            } else if (month[m - 1] == d && m == 12) {
                y = y + 1;
                x = y + "年" + "1月" + "1日";
            } else {
                x = error;
            }
        } else {
            x = error;
        }
        return x;
    }
}
